package cn.zane.lottery.domain.strategy.service.algorithm;

import cn.zane.lottery.domain.strategy.model.AwardRateInfo;

import java.util.List;

/**
 * 抽奖算法接口
 */
public interface IDrawAlgorithm {

    /**
     * 程序启动时，初始化概率元祖，在初始化完成后使用过程中不允许修改元祖数据
     * 初始化策略配置
     * 【0.2,0.3,0.5】 按照100来算【1-20:1001 21-50:1002 51-100:1003】
     * @param strategyId        策略ID
     * @param awardRateInfoList 奖品概率配置集合
     */
    void initRateTuple(Long strategyId, List<AwardRateInfo> awardRateInfoList);

    /**
     * 判断是否已经对某个策略做了数据w3初始化
     *
     * @param strategyId 策略ID
     * @return 是或否
     */
    boolean isExistRateTuple(Long strategyId);

    /**
     * SecureRandom 生成随机数，索引到对应的奖品信息返回结果
     *
     * @param strategyId      策略ID
     * @param excludeAwardIds 排除的奖品ID列表
     * @return 奖品ID
     */
    String randomDraw(Long strategyId, List<String> excludeAwardIds);
}
